package tournoi.stateless;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.Query;

import tournoi.modele.Arbitre;
import tournoi.modele.Equipe;
import tournoi.modele.Rencontre;
import tournoi.modele.Tournoi;

@Stateless
public class GestionBean implements GestionLocal, GestionRemote {
	@PersistenceContext(name = "monUnite", type = PersistenceContextType.EXTENDED)
	EntityManager em;

	@Override
	public Boolean authentifier(String login, String password) {
		return (login.equals("admin") && password.equals("admin"));
	}

	/*
	 * =================================================================
	 * 
	 * EQUIPES
	 * 
	 * =================================================================
	 */
	@Override
	public boolean ajouterEquipe(Equipe e) {
		try {
			em.persist(e);
			return true;
		} catch (Exception ex) {
			return false;
		}

	}

	@Override
	public void supprimerEquipe(Integer numero) {
		Equipe e = recupererEquipe(numero);
		em.remove(e);
	}

	@SuppressWarnings("unchecked")
	@Override
	public Collection<Equipe> recupererEquipes() {
		Collection<Equipe> collec = em.createQuery("From Equipe e")
				.getResultList();
		return collec;
	}

	@Override
	public Equipe recupererEquipe(int id) {
		Query q = em.createQuery("From Equipe e WHERE e.id=:id");
		q.setParameter("id", id);
		return (Equipe) q.getSingleResult();
	}

	/*
	 * =================================================================
	 * 
	 * ARBITRE
	 * 
	 * =================================================================
	 */

	@Override
	public Collection<Arbitre> recupererArbitres() {
		Collection<Arbitre> collec = em.createQuery("From Arbitre a")
				.getResultList();
		return collec;
	}

	@Override
	public Arbitre recupererArbitre(int id) {
		Query q = em.createQuery("From Arbitre a WHERE a.id =:id");
		q.setParameter("id", id);
		return (Arbitre) q.getSingleResult();
	}

	@Override
	public boolean ajouterArbitre(Arbitre a) {
		try {
			em.persist(a);
			return true;
		} catch (Exception ex) {
			return false;
		}
	}

	@Override
	public void supprimerArbitre(int numero) {
		Query q = em.createQuery("From Arbitre a WHERE a.id=:id");
		q.setParameter("id", numero);
		Arbitre a = (Arbitre) q.getSingleResult();
		em.remove(a);
	}

	/*
	 * =================================================================
	 * 
	 * TOURNOI
	 * 
	 * =================================================================
	 */
	@Override
	public boolean creerTournoi(Tournoi t) {
		try {
			em.persist(t);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public Collection<Tournoi> recupererTournois() {
		Collection<Tournoi> collec = em.createQuery("From Tournoi t")
				.getResultList();
		return collec;
	}

	@Override
	public void supprimerTournoi(int numero) {
		Query q = em.createQuery("From Tournoi t WHERE t.idTournoi =:id");
		q.setParameter("id", numero);
		Tournoi t = (Tournoi) q.getSingleResult();
		em.remove(t);
	}

	@Override
	public Tournoi recupererTournoi(int id) {
		Query q = em.createQuery("From Tournoi t WHERE t.idTournoi =:id");
		q.setParameter("id", id);
		return (Tournoi) q.getSingleResult();
	}

	@Override
	public void updateTournoi(Tournoi t) {
		try {
			em.merge(t);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public Rencontre recupererMatch(int id) {
		Query q = em.createQuery("From Rencontre r WHERE r.idRencontre =:id");
		q.setParameter("id", id);
		return (Rencontre) q.getSingleResult();
	}

	@Override
	public void updateMatch(Rencontre r) {
		try {
			em.merge(r);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	 * =================================================================
	 * 
	 * POPULATE
	 * 
	 * =================================================================
	 */
	@Override
	public void populate() {
		// 5 Arbitres
		Arbitre a1 = new Arbitre("Antoine Leguy");
		Arbitre a2 = new Arbitre("Benoît Boyer");
		Arbitre a3 = new Arbitre("Pierre-Antoine Milot");
		Arbitre a4 = new Arbitre("Florent Champigny");
		Arbitre a5 = new Arbitre("Kévin De Jesus Ferreira");

		em.persist(a1);
		em.persist(a2);
		em.persist(a3);
		em.persist(a4);
		em.persist(a5);

		// 4 Equipes

		Equipe e1 = new Equipe();
		List<String> joueurs1 = new ArrayList<String>();
		e1.setNomEquipe("Breaking Bad");
		joueurs1.add("Walter White");
		joueurs1.add("Skyler White");
		joueurs1.add("Jesse Pinkman");
		joueurs1.add("Henry Schrader");
		joueurs1.add("Marie Schrader");
		joueurs1.add("Flynn White");
		joueurs1.add("Saul Goodman");
		joueurs1.add("Gustavo Fring");
		joueurs1.add("Mike Ehrmantraut");
		joueurs1.add("Lydia Rodarte-Quayle");
		joueurs1.add("Todd Alquist");
		e1.setJoueurs(joueurs1);
		em.persist(e1);

		Equipe e2 = new Equipe();
		e2.setNomEquipe("Dexter");
		List<String> joueurs2 = new ArrayList<String>();
		joueurs2.add("Dexter Morgan");
		joueurs2.add("Debra Morgan");
		joueurs2.add("Angel Batista");
		joueurs2.add("Joey Quinn");
		joueurs2.add("Vince Masuka");
		joueurs2.add("Tom Matthews");
		joueurs2.add("Hannah McKay");
		joueurs2.add("Rita Bennett");
		joueurs2.add("Maria LaGuerta");
		joueurs2.add("Laura Moser");
		joueurs2.add("Oliver Saxon");
		e2.setJoueurs(joueurs2);
		em.persist(e2);

		Equipe e3 = new Equipe();
		e3.setNomEquipe("Person of interest");
		List<String> joueurs3 = new ArrayList<String>();
		joueurs3.add("John Reese");
		joueurs3.add("Harold Finch");
		joueurs3.add("Jocelyn Carter");
		joueurs3.add("Lionel Fusco");
		joueurs3.add("Samantha Groves");
		joueurs3.add("Samantha Shaw");
		joueurs3.add("Zoe Morgan");
		joueurs3.add("Jessica Arndt");
		joueurs3.add("Carl Elias");
		joueurs3.add("Nathan Ingram");
		joueurs3.add("Mike Laskey");
		e3.setJoueurs(joueurs3);
		em.persist(e3);

		Equipe e4 = new Equipe();
		e4.setNomEquipe("Arrow");
		List<String> joueurs4 = new ArrayList<String>();
		joueurs4.add("Oliver Queen");
		joueurs4.add("Dinah Laurel Lance");
		joueurs4.add("Tommy Merlyn");
		joueurs4.add("John Diggle");
		joueurs4.add("Thea, Dearden Queen");
		joueurs4.add("Moira Queen");
		joueurs4.add("Quentin Lance");
		joueurs4.add("Felicity Smoak");
		joueurs4.add("Yao Fei");
		joueurs4.add("Shado");
		joueurs4.add("Sarah Lance");
		joueurs4.add("Walter Steele");
		joueurs4.add("Roy Harper");
		e4.setJoueurs(joueurs4);
		em.persist(e4);
	}

}
